#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#include "debug.h"

#include "statistics.h"

extern int valorizacao_media_fora(player **List){
	int total_players = 0;
	int valorizacao_total = 0;
	int i, j, k;
	char team[20];

	for (i = 0; List[i]; i++)
	{
		for (  j= 1; j < ROUNDS_TOTAL; j++)
		{
			if (List[i]->statistics[j] && (List[i]->statistics[j]->JOGOU == 1))
			{
				for (  k= j-1; k >= 0; k--)
					if (List[i]->statistics[k])
						break;
				if (k < 0 && List[i]->statistics[j]->JOGOU == 1)//ignora jogador que tenha somente 1 estatistica
					continue;
				if ( !List[i]->statistics[j-1]->JOGOU_EM_CASA )
				{
					total_players++;
					valorizacao_total += List[i]->statistics[j]->PRECO;
				}
			}
		}
	}
	if (!total_players)
		return 0;
	return (valorizacao_total / total_players);
}

extern int valorizacao_media_emcasa(player **List){
	int total_players = 0;
	int valorizacao_total = 0;
	int i, j, k;
	char team[20];

	for (i = 0; List[i]; i++)
	{
		for (  j= 1; j < ROUNDS_TOTAL; j++)
		{

			if (List[i]->statistics[j] && (List[i]->statistics[j]->JOGOU == 1))
			{
				for (  k= j-1; k >= 0; k--)
					if (List[i]->statistics[k])
						break;
				if (k < 0 && List[i]->statistics[j]->JOGOU == 1)//ignora jogador que tenha somente 1 estatistica
					continue;
				if ( List[i]->statistics[j-1]->JOGOU_EM_CASA )
				{
					total_players++;
					valorizacao_total += List[i]->statistics[j]->PRECO;
				}

//				libplayer_getteamname(team, List[i]->statistics[j]->JOGOU_CONTRA, 20);
//				printf("Name: %s, Jogou = %d, Jogou em casa = %d, Jogou contra = %s, Valorizacao = %d\n", List[i]->name,
//						List[i]->statistics[j]->JOGOU, List[i]->statistics[j]->JOGOU_EM_CASA, team, List[i]->statistics[j]->PRECO);
			}
		}
	}
	if (!total_players)
		return 0;
	return (valorizacao_total / total_players);
}

extern int valorizacao_media(player **List){
	int total_players = 0;
	int valorizacao_total = 0;
	int i, j, k;
	char team[20];

	for (i = 0; List[i]; i++)
	{
//		libplayer_getteamname(team, List[i]->team, 20);
//		printf("Name: %s, Team: %s, Class %d\n", List[i]->name, team, List[i]->class);
		for (  j= 1; j < ROUNDS_TOTAL; j++)
		{
//			if (List[i]->statistics[j])
//			{
//				libplayer_getteamname(team, List[i]->statistics[j]->JOGOU_CONTRA, 20);
//				printf("Jogou = %d, Jogou em casa = %d, Jogou contra = %s, Valorizacao = %d ",
//						List[i]->statistics[j]->JOGOU, List[i]->statistics[j]->JOGOU_EM_CASA, team, List[i]->statistics[j]->PRECO);
//			}else continue;
			if (List[i]->statistics[j] && (List[i]->statistics[j]->JOGOU == 1) )
			{
				for (  k= j-1; k >= 0; k--)
					if (List[i]->statistics[k])
						break;
				if (k < 0 && List[i]->statistics[j]->JOGOU == 1)//ignora jogador que tenha somente 1 estatistica
				{
//					printf("IGNORADO\n");
					continue;
				}
				total_players++;
				valorizacao_total += List[i]->statistics[j]->PRECO;
//				printf("CONTABILIZADO, value = %d, n = %d\n", total_players, valorizacao_total);
			}
//			else printf("IGNORADO\n");
		}
	}
	if (!total_players)
		return 0;
	return (valorizacao_total / total_players);
}

extern int pontuacao_media_fora(player **List){
	int total_players = 0;
	int pontuacao_total = 0;
	int i, j, k;

	for (i = 0; List[i]; i++)
	{
		for (  j= 1; j < ROUNDS_TOTAL; j++)
		{
			if (List[i]->statistics[j] && (List[i]->statistics[j]->JOGOU == 1))
			{
				for (  k= j-1; k >= 0; k--)
					if (List[i]->statistics[k])
						break;
				if (k < 0 && List[i]->statistics[j]->JOGOU == 1)//ignora jogador que tenha somente 1 estatistica
					continue;
				if ( !List[i]->statistics[j-1]->JOGOU_EM_CASA )
				{
					total_players++;
					pontuacao_total += List[i]->statistics[j]->PONTUACAO;
				}
			}
		}
	}
	if (!total_players)
		return 0;
	return (pontuacao_total / total_players);
}

extern int pontuacao_media_emcasa(player **List){
	int total_players = 0;
	int pontuacao_total = 0;
	int i, j, k;
	player *pplayer;

	for (i = 0; List[i]; i++)
	{
		pplayer = List[i];
		for (  j= 1; j < ROUNDS_TOTAL; j++)
		{

			if (pplayer->statistics[j] && (pplayer->statistics[j]->JOGOU == 1))
			{
				for (  k= j-1; k >= 0; k--)
					if (pplayer->statistics[k])
						break;
				if (k < 0 && pplayer->statistics[j]->JOGOU == 1)//ignora jogador que tenha somente 1 estatistica
					continue;
				if ( pplayer->statistics[j-1]->JOGOU_EM_CASA )
				{
					total_players++;
					pontuacao_total += pplayer->statistics[j]->PONTUACAO;
				}
			}
		}
	}
	if (!total_players)
		return 0;
	return (pontuacao_total / total_players);
}
extern int pontuacao_media(player **List){
	int total_players = 0;
	int pontuacao_total = 0;
	int i, j, k;

	for (i = 0; List[i]; i++)
	{
		for (  j= 1; j < ROUNDS_TOTAL; j++)
		{
			if (List[i]->statistics[j] && (List[i]->statistics[j]->JOGOU == 1) )
			{
				for (  k= j-1; k >= 0; k--)
					if (List[i]->statistics[k])
						break;
				if (k < 0 && List[i]->statistics[j]->JOGOU == 1)//ignora jogador que tenha somente 1 estatistica
				{
					continue;
				}
				total_players++;
				pontuacao_total += List[i]->statistics[j]->PONTUACAO;
			}
		}
	}
	if (!total_players)
		return 0;
	return (pontuacao_total / total_players);
}

extern int pontuacao_media2(player **List, int jogou_emcasa, int round_start, int round_end){
	int total_players = 0;
	int pontuacao_total = 0;
	int i, j, k;

	if (round_start < 2 || round_end > ROUNDS_TOTAL || !List)
		return -1;

	for (i = 0; List[i]; i++)
	{
		/*for (  j= 1; j < ROUNDS_TOTAL; j++)*/
		for (  j=round_start-1; j < round_end; j++)
		{
			if (List[i]->statistics[j] && (List[i]->statistics[j]->JOGOU == 1) )
			{
				for (  k= j-1; k >= 0; k--)
					if (List[i]->statistics[k])
						break;
				if (k < 0 && List[i]->statistics[j]->JOGOU == 1)//ignora jogador que tenha somente 1 estatistica
				{
					continue;
				}
				if ( List[i]->statistics[j-1]->JOGOU_EM_CASA == jogou_emcasa)
				{
					total_players++;
					pontuacao_total += List[i]->statistics[j]->PONTUACAO;
				}
			}
		}
	}
	if (!total_players)
		return 0;
	return (pontuacao_total / total_players);
}

extern int custo_medio(player **List/*, int round_start, int round_end*/){
	int total_players = 0;
	int total_rounds = 0;
	int custo_anterior = 0;
	int custo_total = 0;
	int custo_do_jogador = 0;
	int i, j, k;

/*	if (round_start < 1 || round_end > ROUNDS_TOTAL || !List)
		return -1;*/

	for (i = 0; List[i]; i++)
	{
		custo_do_jogador = 0;
		custo_anterior = 0;
		total_rounds = 0;
		/*for (  j= round_start - 1; j < round_end; j++)*/
		for (  j= 0; j < ROUNDS_TOTAL; j++)
		{
			if (List[i]->statistics[j] && (List[i]->statistics[j]->JOGOU))
			{
				for (  k= j-1; k >= 0; k--)
					if (List[i]->statistics[k] && (List[i]->statistics[k]->JOGOU))
						break;
				if ( k < 0 )//primeira estatistica valida
				{
					custo_anterior = List[i]->statistics[j]->PRECO;
//					printf("start: rodada %d, custo %d; ", j, custo_anterior);
				}
				else
				{
					total_rounds++;
					custo_do_jogador += custo_anterior;
					custo_anterior += List[i]->statistics[j]->PRECO;
//					printf("rodada %d, custo %d, %d; ", j, custo_do_jogador, k);
				}
			}
		}
		if (total_rounds)
		{
//			printf("\n");
			custo_total += custo_do_jogador / total_rounds;
			total_players++;
		}
	}

	if (!total_players)
		return 0;
	return (custo_total / total_players);
}

/*
 * Calcula a media de pontos da lista "List" jogando contra o time "team"
 */
extern int pontuacao_media_contra(int team, int jogou_emcasa, player **List)
{
    int total_players = 0;
    int pontuacao_total = 0;
    int i, j, k;
    player *pplayer;

    for (i = 0; List[i]; i++)
    {
            pplayer = List[i];
            for (  j= 1; j < ROUNDS_TOTAL; j++)
            {

                    if (pplayer->statistics[j] && (pplayer->statistics[j]->JOGOU == 1))
                    {
                            for (  k= j-1; k >= 0; k--)
                                    if (pplayer->statistics[k])
                                            break;
                            if (k < 0 && pplayer->statistics[j]->JOGOU == 1)//ignora jogador que tenha somente 1 estatistica
                                    continue;
                            if ((pplayer->statistics[j-1]->JOGOU_EM_CASA == jogou_emcasa) &&
                            	(pplayer->statistics[j-1]->JOGOU_CONTRA == team))
                            {
                                    total_players++;
                                    pontuacao_total += pplayer->statistics[j]->PONTUACAO;
                            }
                    }
            }
    }
    if (!total_players)
            return 0;
    return (pontuacao_total / total_players);
}
